package net.valerijtimakov.homefinances.dao.storages.finances;

import java.util.Date;
import java.util.Map;
import net.valerijtimakov.homefinances.domain.finances.IncomingItem;
import net.valerijtimakov.homefinances.exceptions.AppExceptionWrongState;
import net.valerijtimakov.homefinances.exceptions.AppPersProviderException;
import net.valerijtimakov.homefinances.exceptions.AppPersistentException;
import net.valerijtimakov.homefinances.exceptions.wrongarg.AppExceptionNullArgument;

public interface IIncomingsStorage {
	Map<Long, IncomingItem> filterIncomings(long[] accountsIds, long[] cathegoriesIds, 
		long[] currenciesIds, Date addDateFrom, Date addDateTo, float incomingFrom, 
		float incomingTo, String namePattern) throws AppPersProviderException, AppExceptionWrongState;
	Map<Long, IncomingItem> getAccountsIncomings(long ... accountsId) throws AppPersProviderException, AppExceptionWrongState;
	Map<Long, IncomingItem> getIncomings(long ... id) throws AppPersProviderException, AppExceptionWrongState;
	void addIncoming(IncomingItem item) throws AppExceptionNullArgument, AppExceptionWrongState, AppPersistentException;
	void removeIncoming(long id) throws AppPersProviderException, AppExceptionWrongState;
	void updateIncoming(IncomingItem item) throws AppPersProviderException, AppExceptionWrongState;
}
